/********************************************************************************
 * Project Name		[JavaSE_Fundamentals]
 * File Name     	[ConditionStatements.java]
 * Creation Date 	[2015-01-01]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ********************************************************************************/
package basicGrammar.flowControl;

/**
 * 条件语句
 * 
 * @author 不落的太阳(Sean Yang aka ShortPeace)
 * @version 1.0
 * @since jdk 1.8
 * 
 */
public class ConditionStatements {

	public static final int TARGET_NUMBER = 10;

	/**
	 * 通过if语句和递归方法使n的值逐渐变为TARGET_NUMBER
	 * 
	 * @param n
	 */
	public static void conditionStatement(int n) {
		System.out.print(n + "\t");
		if (n == TARGET_NUMBER) {
			System.out.println();
		} else if (n > TARGET_NUMBER) {
			conditionStatement(--n);
		} else if (n < TARGET_NUMBER) {
			conditionStatement(++n);
		}
	}

	/**
	 * switch语句<br/>
	 * switch中选择因子n的类型只能为byte, short, char, int和Enum类型; jdk 1.7开始n的类型可以为String类型
	 * <br/>
	 * 选择因子n如果和后面某个case匹配成功, 就执行其后的语句, 直到遇到break退出<br/>
	 * 若一个case语句后没有break语句, 它会继续按顺序执行之后的每个case语句直到遇到break退出或所有的case语句执行完毕为止
	 * <br/>
	 * default语句不是必须的, 其也可以放在switch结构的任意位置, 一般放于尾部,
	 * 如果switch语句中的选择因子n和所有的case均不匹配时会执行default语句<br/>
	 */
	public static void switchStatement() {
		float money = 950;
		float rebate = 0;

		if (money > 200) {
			int grade = (int) (money / 200);
			switch (grade) {
			case 1:
				rebate = 0.95F;
				break;
			case 2:
				rebate = 0.90F;
				break;
			case 3:
				rebate = 0.85F;
				break;
			case 4:
				rebate = 0.8F;
				break;
			case 5:
				rebate = 0.75F;
				break;
			default:
				rebate = 0.7F;
				break;
			}
		}
		System.out.println("一共消费了" + money + ", 折扣为" + rebate);
	}

	/**
	 * 条件表达式<br/>
	 * booleanCondition ? expr1 : expr2<br/>
	 * 如果booleanCondition结果为true, 输出expr1的内容, 否则expr2的内容, 相当于一个简化版本的if…else语句
	 */
	@SuppressWarnings("unused")
	public static void conditionExpression() {
		System.out.println("1大于2吗? " + (1 > 2 ? "大于" : "小于"));
	}

	public static void main(String[] args) {
		conditionStatement(15);
		switchStatement();
		conditionExpression();
	}
}
